package savet.gui.util;

import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JPopupMenu;
import javax.swing.JTable;
import savet.entidades.Trabalhador;
import savet.entidades.atributos.Ferias;
import savet.entidades.atributos.Salario;
import savet.util.ListaTrabalhadores;

/**
 * Classe utilizada em conjunto com {@link JPopupMenu} com {@link PopupPeriodosItem}.<br/><br/>
 * Essas classes foram criadas para criar um menu popup para {@link JTable} de {@link Ferias}.
 *
 * @author Adisson Marinho
 */
public class MousePeriodosListener extends MouseAdapter {

    private JPopupMenu pop = null;

    @Override
    public void mouseReleased(MouseEvent e) {
        showPopup(e);
    }

    @Override
    public void mousePressed(MouseEvent e) {
        showPopup(e);
    }

    private void showPopup(MouseEvent e) {
        if (pop != null) {
            pop.setVisible(false);
        }

//        System.out.print("show popup...");
        if (e.isPopupTrigger()) {
            JTable source = (JTable) e.getSource();

            int linhaTabela = source.rowAtPoint(e.getPoint());

            if (linhaTabela != -1) {

                Component[] components = source.getComponents();
                for (Component component : components) {
                    if (component instanceof JPopupMenu) {
                        pop = (JPopupMenu) component;
                        break;
                    }
                }

                if (pop != null) {
                    configurarFeriasItem(pop.getComponents(), source, linhaTabela);
                    pop.show(source, e.getX(), e.getY());
                }
            }
        }
    }

    private void configurarFeriasItem(Component [] components, JTable source, int linhaTabela) {
        // Obter referencia de Ferias do trabalhador correspondente a linha da tabela
        Trabalhador t = ListaTrabalhadores.getInstance().getTrabalhador(linhaTabela);
        
        for (int i = 0; i < components.length; i++) {
            Component c = components[i];
            if (c instanceof PopupPeriodosItem) {
                PopupPeriodosItem item = (PopupPeriodosItem) c;
                item.setRowToUpdate(source, linhaTabela);
            }
        }
    }

    private void configurarSalarioItem(Component c1, Component c2, JTable source, int linhaTabela) {
        // Obter referencia de Salario do trabalhador correspondente a linha da tabela
        Trabalhador t = ListaTrabalhadores.getInstance().getTrabalhador(linhaTabela);
//        Salario salario = t.getSalario();
//
//        if (c1 instanceof FeriasItem) {
//            FeriasItem item0 = (FeriasItem) c1;
//            item0.setFerias(ferias);
//            item0.setRowToUpdate(source, linhaTabela);
//        }
//        if (c2 instanceof FeriasItem) {
//            FeriasItem item1 = (FeriasItem) c2;
//            item1.setFerias(ferias);
//            item1.setRowToUpdate(source, linhaTabela);
//        }
    }
}
